/*
 *http://www.apache.org/licenses/LICENSE-2.0
 * Copyright (c) 2021 fullset
 * @Description:  统一数据结果
 * @author: pangps
 * @date: 2021/5/29 16:41
 */
package com.fs.core.web;

import java.io.Serializable;

public class BaseResult<T> implements Serializable{
	private static final long serialVersionUID = 1L;

	/**
	 * 请求响应状态码
	 * 100 ERROR： 代码异常
	 * 200 OK：服务器成功返回用户请求的数据
	 * 201 CREATED ：用户新建或修改数据成功。
	 * 202 Accepted：表示请求已进入后台排队。
	 * 400 INVALID REQUEST ：用户发出的请求有错误。
	 * 401 Unauthorized ：用户没有权限。
	 * 403 Forbidden ：访问被禁止。
	 * 404 NOT FOUND ：请求针对的是不存在的记录。
	 * 406 Not Acceptable ：用户请求的的格式不正确。
	 * 500 INTERNAL SERVER ERROR ：服务器发生错误。
	 */
	private Integer code = 200;

	/**
	 * 请求响应信息
	 */
	private String msg = "操作成功";

	/**
	 * 请求地址
	 */
	private String url;

	/**
	 * 总数
	 */
	private Integer count = 0;

	/**
	 * 请求响应数据结果
	 */
	private T data;

	public BaseResult() {
		super();
	}

	public BaseResult(T data) {
		super();
		this.data = data;
	}

	public BaseResult(T data, String msg) {
		super();
		this.data = data;
		this.msg = msg;
	}

	public BaseResult(T data, Integer code, String msg) {
		super();
		this.data = data;
		this.code = code;
		this.msg = msg;
	}

	public BaseResult(Integer count, T data) {
		super();
		this.count = count;
		this.data = data;
	}

	public BaseResult(Throwable e) {
		super();
		this.msg = e.getMessage();
		this.code = 100;
	}

	/**
	 * 失败
	 * @param code
	 * @param message
	 * @return
	 */
	public static BaseResult error(int code, String message) {
		BaseResult rt = new BaseResult();
		rt.setCode(code);
		rt.setMsg(message);
		rt.setData(null);
		return rt;
	}

	public Integer getCode() {
		return code;
	}

	public void setCode(Integer code) {
		this.code = code;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public Integer getCount() {
		return count;
	}

	public void setCount(Integer count) {
		this.count = count;
	}

	public T getData() {
		return data;
	}

	public void setData(T data) {
		this.data = data;
	}
}
